<!-- HTML header for doxygen 1.8.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<title>OpenCV: Upscaling images: multi-output</title>
<link href="../../opencv.ico" rel="shortcut icon" type="image/x-icon" />
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="../../tutorial-utils.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
//<![CDATA[
MathJax.Hub.Config(
{
  TeX: {
      Macros: {
          matTT: [ "\\[ \\left|\\begin{array}{ccc} #1 & #2 & #3\\\\ #4 & #5 & #6\\\\ #7 & #8 & #9 \\end{array}\\right| \\]", 9],
          fork: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ \\end{array} \\right.", 4],
          forkthree: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ #5 & \\mbox{#6}\\\\ \\end{array} \\right.", 6],
          forkfour: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ #5 & \\mbox{#6}\\\\ #7 & \\mbox{#8}\\\\ \\end{array} \\right.", 8],
          vecthree: ["\\begin{bmatrix} #1\\\\ #2\\\\ #3 \\end{bmatrix}", 3],
          vecthreethree: ["\\begin{bmatrix} #1 & #2 & #3\\\\ #4 & #5 & #6\\\\ #7 & #8 & #9 \\end{bmatrix}", 9],
          cameramatrix: ["#1 = \\begin{bmatrix} f_x & 0 & c_x\\\\ 0 & f_y & c_y\\\\ 0 & 0 & 1 \\end{bmatrix}", 1],
          distcoeffs: ["(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6 [, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]]) \\text{ of 4, 5, 8, 12 or 14 elements}"],
          distcoeffsfisheye: ["(k_1, k_2, k_3, k_4)"],
          hdotsfor: ["\\dots", 1],
          mathbbm: ["\\mathbb{#1}", 1],
          bordermatrix: ["\\matrix{#1}", 1]
      }
  }
}
);
//]]>
</script><script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js"></script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
<link href="../../stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<!--#include virtual="/google-search.html"-->
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="../../opencv-logo-small.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">OpenCV
   &#160;<span id="projectnumber">4.5.2</span>
   </div>
   <div id="projectbrief">Open Source Computer Vision</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
<script type="text/javascript" src="../../menudata.js"></script>
<script type="text/javascript" src="../../menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('../../',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="../../d3/d81/tutorial_contrib_root.html">Tutorials for contrib modules</a></li><li class="navelem"><a class="el" href="../../d8/df8/tutorial_table_of_content_dnn_superres.html">Super Resolution using CNNs</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">Upscaling images: multi-output </div>  </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><p>In this tutorial you will learn how to use the 'dnn_superres' interface to upscale an image via a multi-output pre-trained neural network. OpenCVs dnn module supports accessing multiple nodes in one inference, if the names of the nodes are given. Currently there is one model included that is capable of giving more output in one inference run, that is the LapSRN model. LapSRN supports multiple outputs with one forward pass. It can now support 2x, 4x, 8x, and (2x, 4x) and (2x, 4x, 8x) super-resolution. The uploaded trained model files have the following output node names:</p><ul>
<li>2x model: NCHW_output</li>
<li>4x model: NCHW_output_2x, NCHW_output_4x</li>
<li>8x model: NCHW_output_2x, NCHW_output_4x, NCHW_output_8x</li>
</ul>
<h2>Building </h2>
<p>When building OpenCV, run the following command to build all the contrib module:</p>
<div class="fragment"><div class="line">cmake -D OPENCV_EXTRA_MODULES_PATH=&lt;opencv_contrib&gt;/modules/</div></div><!-- fragment --><p>Or only build the dnn_superres module:</p>
<div class="fragment"><div class="line">cmake -D OPENCV_EXTRA_MODULES_PATH=&lt;opencv_contrib&gt;/modules/dnn_superres</div></div><!-- fragment --><p>Or make sure you check the dnn_superres module in the GUI version of CMake: cmake-gui.</p>
<h2>Source Code of the sample </h2>
<p>Run the sample code with the following command</p>
<div class="fragment"><div class="line">./bin/example_dnn_superres_dnn_superres_multioutput path/to/image.png 2,4 NCHW_output_2x,NCHW_output_4x \</div><div class="line">path/to/opencv_contrib/modules/dnn_superres/models/LapSRN_x4.pb</div></div><!-- fragment --><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">// This file is part of OpenCV project.</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// It is subject to the license terms in the LICENSE file found in the top-level directory</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// of this distribution and at http://opencv.org/license.html.</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;</div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &lt;sstream&gt;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../d3/db0/dnn__superres_8hpp.html">opencv2/dnn_superres.hpp</a>&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../d1/d4f/imgproc_2include_2opencv2_2imgproc_8hpp.html">opencv2/imgproc.hpp</a>&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="../../d4/dd5/highgui_8hpp.html">opencv2/highgui.hpp</a>&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="keyword">using namespace </span>std;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="keyword">using namespace </span><a class="code" href="../../d2/d75/namespacecv.html">cv</a>;</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="keyword">using namespace </span>dnn_superres;</div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keywordtype">int</span> main(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[])</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;{</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;    <span class="comment">// Check for valid command line arguments, print usage</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;    <span class="comment">// if insufficient arguments were given.</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;    <span class="keywordflow">if</span> (argc &lt; 4) {</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;        cout &lt;&lt; <span class="stringliteral">&quot;usage:   Arg 1: image     | Path to image&quot;</span> &lt;&lt; endl;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;        cout &lt;&lt; <span class="stringliteral">&quot;\t Arg 2: scales in a format of 2,4,8\n&quot;</span>;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;        cout &lt;&lt; <span class="stringliteral">&quot;\t Arg 3: output node names in a format of nchw_output_0,nchw_output_1\n&quot;</span>;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;        cout &lt;&lt; <span class="stringliteral">&quot;\t Arg 4: path to model file \n&quot;</span>;</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;        <span class="keywordflow">return</span> -1;</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    }</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    <span class="keywordtype">string</span> img_path = string(argv[1]);</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <span class="keywordtype">string</span> scales_str = string(argv[2]);</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <span class="keywordtype">string</span> output_names_str = string(argv[3]);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    std::string path = string(argv[4]);</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="comment">//Parse the scaling factors</span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    std::vector&lt;int&gt; scales;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keywordtype">char</span> delim = <span class="charliteral">&#39;,&#39;</span>;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    {</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;        std::stringstream ss(scales_str);</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;        std::string token;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;        <span class="keywordflow">while</span> (std::getline(ss, token, delim)) {</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;            scales.push_back(atoi(token.c_str()));</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;        }</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    }</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    <span class="comment">//Parse the output node names</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    std::vector&lt;String&gt; node_names;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    {</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;        std::stringstream ss(output_names_str);</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;        std::string token;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;        <span class="keywordflow">while</span> (std::getline(ss, token, delim)) {</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;            node_names.push_back(token);</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;        }</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    }</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="comment">// Load the image</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <a class="code" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> img = <a class="code" href="../../d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56">cv::imread</a>(img_path);</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <a class="code" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> original_img(img);</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    <span class="keywordflow">if</span> (img.<a class="code" href="../../d3/d63/classcv_1_1Mat.html#abbec3525a852e77998aba034813fded4">empty</a>())</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    {</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;        std::cerr &lt;&lt; <span class="stringliteral">&quot;Couldn&#39;t load image: &quot;</span> &lt;&lt; img &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;        <span class="keywordflow">return</span> -2;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    }</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    <span class="comment">//Make dnn super resolution instance</span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    DnnSuperResImpl sr;</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="keywordtype">int</span> scale = *max_element(scales.begin(), scales.end());</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    std::vector&lt;Mat&gt; outputs;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    sr.readModel(path);</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    sr.setModel(<span class="stringliteral">&quot;lapsrn&quot;</span>, scale);</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    sr.upsampleMultioutput(img, outputs, scales, node_names);</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; outputs.size(); i++)</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    {</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;        <a class="code" href="../../d7/dfc/group__highgui.html#ga5afdf8410934fd099df85c75b2e0888b">cv::namedWindow</a>(<span class="stringliteral">&quot;Upsampled image&quot;</span>, <a class="code" href="../../d0/d90/group__highgui__window__flags.html#ggabf7d2c5625bc59ac130287f925557ac3acf621ace7a54954cbac01df27e47228f">WINDOW_AUTOSIZE</a>);</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;        <a class="code" href="../../d7/dfc/group__highgui.html#ga453d42fe4cb60e5723281a89973ee563">cv::imshow</a>(<span class="stringliteral">&quot;Upsampled image&quot;</span>, outputs[i]);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;        <span class="comment">//cv::imwrite(&quot;./saved.jpg&quot;, img_new);</span></div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;        <a class="code" href="../../d7/dfc/group__highgui.html#ga5628525ad33f52eab17feebcfba38bd7">cv::waitKey</a>(0);</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    }</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;}</div><div class="ttc" id="group__imgcodecs_html_ga288b8b3da0892bd651fce07b3bbd3a56"><div class="ttname"><a href="../../d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56">cv::imread</a></div><div class="ttdeci">Mat imread(const String &amp;filename, int flags=IMREAD_COLOR)</div><div class="ttdoc">Loads an image from a file. </div></div>
<div class="ttc" id="highgui_8hpp_html"><div class="ttname"><a href="../../d4/dd5/highgui_8hpp.html">highgui.hpp</a></div></div>
<div class="ttc" id="group__highgui_html_ga453d42fe4cb60e5723281a89973ee563"><div class="ttname"><a href="../../d7/dfc/group__highgui.html#ga453d42fe4cb60e5723281a89973ee563">cv::imshow</a></div><div class="ttdeci">void imshow(const String &amp;winname, InputArray mat)</div><div class="ttdoc">Displays an image in the specified window. </div></div>
<div class="ttc" id="namespacecv_html"><div class="ttname"><a href="../../d2/d75/namespacecv.html">cv</a></div><div class="ttdoc">&quot;black box&quot; representation of the file storage associated with a file on disk. </div><div class="ttdef"><b>Definition:</b> affine.hpp:51</div></div>
<div class="ttc" id="group__highgui_html_ga5afdf8410934fd099df85c75b2e0888b"><div class="ttname"><a href="../../d7/dfc/group__highgui.html#ga5afdf8410934fd099df85c75b2e0888b">cv::namedWindow</a></div><div class="ttdeci">void namedWindow(const String &amp;winname, int flags=WINDOW_AUTOSIZE)</div><div class="ttdoc">Creates a window. </div></div>
<div class="ttc" id="dnn__superres_8hpp_html"><div class="ttname"><a href="../../d3/db0/dnn__superres_8hpp.html">dnn_superres.hpp</a></div></div>
<div class="ttc" id="group__highgui__window__flags_html_ggabf7d2c5625bc59ac130287f925557ac3acf621ace7a54954cbac01df27e47228f"><div class="ttname"><a href="../../d0/d90/group__highgui__window__flags.html#ggabf7d2c5625bc59ac130287f925557ac3acf621ace7a54954cbac01df27e47228f">cv::WINDOW_AUTOSIZE</a></div><div class="ttdoc">the user cannot resize the window, the size is constrainted by the image displayed. </div><div class="ttdef"><b>Definition:</b> highgui.hpp:188</div></div>
<div class="ttc" id="imgproc_2include_2opencv2_2imgproc_8hpp_html"><div class="ttname"><a href="../../d1/d4f/imgproc_2include_2opencv2_2imgproc_8hpp.html">imgproc.hpp</a></div></div>
<div class="ttc" id="classcv_1_1Mat_html"><div class="ttname"><a href="../../d3/d63/classcv_1_1Mat.html">cv::Mat</a></div><div class="ttdoc">n-dimensional dense array class </div><div class="ttdef"><b>Definition:</b> mat.hpp:801</div></div>
<div class="ttc" id="classcv_1_1Mat_html_abbec3525a852e77998aba034813fded4"><div class="ttname"><a href="../../d3/d63/classcv_1_1Mat.html#abbec3525a852e77998aba034813fded4">cv::Mat::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdoc">Returns true if the array has no elements. </div></div>
<div class="ttc" id="group__highgui_html_ga5628525ad33f52eab17feebcfba38bd7"><div class="ttname"><a href="../../d7/dfc/group__highgui.html#ga5628525ad33f52eab17feebcfba38bd7">cv::waitKey</a></div><div class="ttdeci">int waitKey(int delay=0)</div><div class="ttdoc">Waits for a pressed key. </div></div>
</div><!-- fragment --><h2>Explanation </h2>
<ol type="1">
<li><b>Set header and namespaces</b> <div class="fragment"><div class="line"><span class="preprocessor">#include &lt;<a class="code" href="../../d3/db0/dnn__superres_8hpp.html">opencv2/dnn_superres.hpp</a>&gt;</span></div><div class="line"><span class="keyword">using namespace </span>std;</div><div class="line"><span class="keyword">using namespace </span><a class="code" href="../../d2/d75/namespacecv.html">cv</a>;</div><div class="line"><span class="keyword">using namespace </span>dnn_superres;</div></div><!-- fragment --></li>
<li><p class="startli"><b>Create the Dnn Superres object</b> </p><div class="fragment"><div class="line">DnnSuperResImpl sr;</div></div><!-- fragment --><p class="startli">Instantiate a dnn super-resolution object.</p>
</li>
<li><p class="startli"><b>Read the model</b> </p><div class="fragment"><div class="line">path = <span class="stringliteral">&quot;models/LapSRN_x8.pb&quot;</span></div><div class="line">sr.readModel(path);</div></div><!-- fragment --><p class="startli">Read the model from the given path.</p>
</li>
<li><p class="startli"><b>Set the model</b> </p><div class="fragment"><div class="line">sr.setModel(<span class="stringliteral">&quot;lapsrn&quot;</span>, 8);</div></div><!-- fragment --><p class="startli">Sets the algorithm and scaling factor. The last (largest) scaling factor should be given here.</p>
</li>
<li><p class="startli"><b>Give the node names and scaling factors</b> </p><div class="fragment"><div class="line">std::vector&lt;int&gt; scales{2, 4, 8}</div><div class="line">std::vector&lt;int&gt; node_names{<span class="stringliteral">&#39;NCHW_output_2x&#39;</span>,<span class="stringliteral">&#39;NCHW_output_4x&#39;</span>,<span class="stringliteral">&#39;NCHW_output_8x&#39;</span>}</div></div><!-- fragment --><p class="startli">Set the scaling factors, and the output node names in the model.</p>
</li>
<li><p class="startli"><b>Upscale an image</b> </p><div class="fragment"><div class="line">Mat img = <a class="code" href="../../d4/da8/group__imgcodecs.html#ga288b8b3da0892bd651fce07b3bbd3a56">cv::imread</a>(img_path);</div><div class="line">std::vector&lt;Mat&gt; outputs;</div><div class="line">sr.upsampleMultioutput(img, outputs, scales, node_names);</div></div><!-- fragment --><p class="startli">Run the inference. The output images will be stored in a Mat vector. </p>
</li>
</ol>
</div></div><!-- contents -->
<!-- HTML footer for doxygen 1.8.6-->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Apr 2 2021 11:36:38 for OpenCV by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="../../doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
<script type="text/javascript">
//<![CDATA[
addTutorialsButtons();
//]]>
</script>
</body>
</html>
